import java.util.Calendar;

public class Prestamo extends Item{
 
	// Atributos
	private Usuario usuario;
	private Calendar fechaInicio;
	private Calendar fechaCancelacion;
	private static int plazo = 7;
	
	//Constructor
	public Prestamo(Usuario usuario){
		super();
		this.setFechaInicio(Calendar.getInstance());
		this.setUsuario(usuario);
		if(usuario.estaHabilitado()){this.habilitar();};
	}
	
	public Prestamo(Usuario usuario,Calendar fechaInicio){
		super();
		this.setFechaInicio(fechaInicio);
		this.setUsuario(usuario);
		if(usuario.estaHabilitado()){this.habilitar();};
	}
	
	// Getters And Setters
	public Usuario getUsuario() {
		return usuario;
	}
	private void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	public Calendar getFechaInicio() {
		return fechaInicio;
	}
	private void setFechaInicio(Calendar fechaInicio) {
		this.fechaInicio = fechaInicio;
	}
	public static int getPlazo() {
		return plazo;
	}
	public Calendar getFechaCancelacion() {
		return fechaCancelacion;
	}
	private void setFechaCancelacion(Calendar fechaCancelacion) {
		this.fechaCancelacion = fechaCancelacion;
	}

	
	/* Metodos */
	public static void modificarPlazo(int plazo){
		Prestamo.plazo = plazo;
	}
	
	public void mostrarDatos(){
		System.out.println("\t\tFecha Inicio: "+this.getFechaInicio().getTime());
		System.out.println("\t\tFecha Fin: "+this.getFechaFin().getTime());
		if(!this.estaHabilitado()){System.out.println("\t\tFecha Cancelacion: "+this.getFechaCancelacion().getTime());};
		System.out.println("\t\tPlazo: "+this.getPlazo()+" días.");
		System.out.println("\t\tEstado: "+this.estaHabilitadoTexto());
		System.out.println("\t\tUsuario: "+this.getUsuario().getApellido()+", "+this.getUsuario().getNombre());
	}
	
	public Calendar getFechaFin(){
		Calendar fechaFin = this.getFechaInicio().getInstance();
		fechaFin.add(Calendar.DAY_OF_MONTH, this.getPlazo());
		return fechaFin;
		}
	
	public void cancelar(){
		this.setFechaCancelacion(Calendar.getInstance());
		this.deshabilitar();
		this.getUsuario().habilitar();
	}
	
	/* Redefinimos */
	public boolean equals(Prestamo prestamo){
		if(prestamo!=null){
			Calendar fechafin = this.getFechaFin().getInstance();
			Calendar fechafinPrestamo = prestamo.getFechaFin().getInstance();
		
			fechafin.set(Calendar.MILLISECOND, 0);
			fechafinPrestamo.set(Calendar.MILLISECOND, 0);
		
			if(
					(this.estaHabilitado()==prestamo.estaHabilitado())
					&&
					(fechafin.compareTo(fechafinPrestamo)==0)
					&&
					(this.getFechaInicio().compareTo(prestamo.getFechaInicio())==0)
					&&
					(this.getUsuario()==prestamo.getUsuario())
					&&
					(this.estaHabilitado()==prestamo.estaHabilitado())
					){
						// Hay posibilidad que la fecha de cancelacion sea NULL, por lo que lo vamos a analizar de otra forma 
						if(this.getFechaCancelacion()!=null && prestamo.getFechaCancelacion()!=null){
							if(this.getFechaCancelacion().compareTo(prestamo.getFechaCancelacion())==0){return true;} else {return false;}
						} else {
							if(this.getFechaCancelacion()==prestamo.getFechaCancelacion()){return true;} else {return false;}
						}
					}
		}
			return false;
	}
}
